iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
Software Development

Python派神,大顯神威!!系列 第 25

【Day25】:實作Python實現無人辦公室 (五) +使用smtplib、MIME套件寄出附檔信件

  • 分享至 

  • xImage
  •  

我們每天辛辛苦苦的成果,
無非換來每個月的工時申報,
以獲得當月的薪資,
如果進度成果沒有交付,
一方面可能收到月薪都不踏實、
一方面進度成果得不到肯定、
更有可能一方面遇到issue無法得到主管資源的協助。

以上的種種因素可以看出上班時每周周報的重要性,
「但,一般的工作已經費盡心思執行了,還需花時間寫報告、寄報告。老闆根本不體恤員工的辛勞。」
相信,這是很多辛苦員工與工程師的內心話,
如果這時候,Python又拍起胸脯說:「讓我來吧!別說只有十個,多少個都一起上吧!」
別以為Python愛說大話,
從前面幾天到今天第25天,
你、我都看到,
只要你提出來,
Python都能解決你的需求或給予建議的實作。
以下我們就來看看Pythoh針對寄出報告的解決方案建議吧!

(一) 本次「寄出附檔信件」套件

  1. 有關發送信件套件smtplib小小充電站:
    當我們需要寄送信件時就需要使用SMTP,然而SMTP是什麼呢?SMTP(全名Simple Mail Transfer Protocol)是專門用來寄Email的規範(例如:訊息的格式、加密、Server間的傳送…等等)。而Python的smtplib所提供的功能就是來幫我們處理寄送信件的。當我們需要透過python來寄發信件時,可以使用smtplib這個套件來達成這項工作。

(1). smtplib 函式庫
https://ithelp.ithome.com.tw/upload/images/20221010/201411984cTtRVviHa.png

2.有關附加檔案套件MIMEText小小充電站:
Smtplib主要處理信件寄出,無法傳輸圖檔、影片,因此需要另外找MIME套件來協助。

MIME主要分成兩種格式,一種是type,一種是subtype。
A. type:
https://ithelp.ithome.com.tw/upload/images/20221010/20141198gVeiLM1Ta2.png

B. subtype:
https://ithelp.ithome.com.tw/upload/images/20221010/20141198CPepSoxX2Z.png

(二) 本次「寄出附檔信件」程式碼
記得先準備好昨天產生的Report.doc檔案。

import smtplib
from email.mime.multipart import MIMEMultipart
# 讀取Word檔案套件
from email.mime.application import MIMEApplication

msg = MIMEMultipart()
filename01 = "Report.doc"

with open(filename01, "rb") as file:
    filecontent=file.read()
mime=MIMEApplication(filecontent)
mime["Content-Type"]="application/msword Microsoft"  
mime["Content-Disposition"]='attachment; filename="' + filename01 + '"'  

# 撰寫郵件標題
mime["Subject"]="寄送9月份週報(含Word附檔)" 

# 撰寫自己的暱稱
mime["From"]="亞當" 

# 撰寫收件者
mime["To"]="麥可" 

# 副本收件者
mime["Cc"]="xxxxx@gmail.com" 
msg=mime.as_string() #將msg轉成str

# 指定smtp主機與port
smtp=smtplib.SMTP("smtp.gmail.com", 587)  

#申請身分
smtp.ehlo()

#加密文件,避免私密信息被截取
smtp.starttls()

# login("你的信箱", "密碼")
smtp.login("xxx@gmail.com", "xxxxx") 

# 你的信箱
from_addr="xxxxx@gmail.com"

# 收信人信箱
to_addr=["xxxxx@gmail.com"]

status=smtp.sendmail(from_addr, to_addr, msg)
if status=={}:
    print("Email sent successfully!")
else:
    print("Mail delivery failed!")
smtp.quit()

(三) 電子信箱設定
需要注意的是,Gmail 使用者一開始透過 Python smtplib 寄信可能會被擋(Gmail 會因安全性風險而阻止程式寄信)。
故請先去以下網站,將權限打開(預設為關閉,程式需要將設定改成開啟)
https://myaccount.google.com/lesssecureapps
https://ithelp.ithome.com.tw/upload/images/20221010/20141198oQOyE9Dslh.png

https://ithelp.ithome.com.tw/upload/images/20221010/20141198hhXfnvUhjR.png

https://ithelp.ithome.com.tw/upload/images/20221010/20141198awxeCJpTX3.png

以上取得的密碼就是給email login時發送使用的。

(四) 本次「寄出附檔信件」的結果
https://ithelp.ithome.com.tw/upload/images/20221010/20141198xtuXsl4oMM.png

https://ithelp.ithome.com.tw/upload/images/20221010/201411981gU6oLoUgN.png

這幾天我們看到了Python「草創」無人辦公室的能耐,
礙於篇幅與場合的關係我呈現的是完整流程的點狀功能,
但是,這就是「精緻無人辦公室」的起步,
如果時間允許,我當然可以為各位展示更完整的Python這方面的企業應用,
值得期待,這樣的場合即便鐵人賽完賽後我會找個機會給大家演示,
也讓期待的學員擁有這些資訊,
若認同我的文章持續追蹤我,
我將不讓各位失望,也將證明Python從未讓人失望的一面,
明天起我們繼續來看看Python在其他領域的應用。


上一篇
【Day24】:實作Python實現無人辦公室 (四) +python-docx套件檔案插入圖檔與表格
下一篇
【Day26】: 開源Python大神壓箱寶 (一) + Apache Airflow工作流程管理系統
系列文
Python派神,大顯神威!!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言